// NIM 			: 13509044
// Nama 		: Bagus Rahman Aryabima
// Nama File 	: PLAYER.cpp
// Tanggal 		: 10 Maret 2011
// Deskripsi 	: Kelas PLAYER di Tugas Besar 1

#include "PLAYER.h"

// Default constructor
Player::Player() {
	setName("-");					// Mengeset nama karakter dengan "-"
	setPosition(0,0);				// Meletakkan karakter di titik asal (0,0)
	setLocation(1);					// Mengeset identifier lokasi dengan nilai 1
	setStatus(0);					// Mengeset identifier status dengan nilai 0
	setOD(0);						// Mengeset OD_Meter di titik 0
	setSakaw(0);					// Mengeset Sakaw_Meter di titik 0
	setMoney(0);					// Mengeset uang karakter dengan nilai 0
	Brangkas = new Inventory;		// Mengeset brangkas dengan sebuah inventory baru
	// cout << "Player dengan atribut minimal berhasil dibuat" << endl;
}

// User-defined constructor
Player::Player(string newName, int newX, int newY, int newLocation, int newStatus, int newOD, int newSakaw, int newMoney) {
	setName(newName);				// Mengeset nama karakter dengan newName
	setPosition(newX,newY);			// Meletakkan karakter di titik (newX,newY)
	setLocation(newLocation);		// Mengeset identifier lokasi dengan nilai newLocation
	setStatus(newStatus);			// Mengeset identifier status dengan nilai newStatus
	setOD(newOD);					// Mengeset OD_Meter di titik newOD
	setSakaw(newSakaw);				// Mengeset Sakaw_Meter di titik new Sakaw
	setMoney(newMoney);				// Mengeset uang karakter dengan nilai newMoney
	Brangkas = new Inventory;		// Mengeset brangkas dengan sebuah inventory baru
	cout << "Player dengan masukan tertentu berhasil dibuat" << endl;
}

// Copy constructor
// Player::Player(const Player& P) {
//	setName(P.Name);
//	setPosition(P.X,P.Y);
//	setLocation(P.Location);
//	setStatus(P.Status);
//	setOD(P.OD_Meter);
//	setSakaw(P.Sakaw_Meter);
//	setMoney(P.Money);
// }

// Destructor
Player::~Player() {
	// cout << "Player berhasil dimusnahkan" << endl;
}

// Fungsi get
string Player::getName() {
	return Name; 			// Mengembalikan nama karakter
}

int Player::getLocation() {
	return Location;		// Mengembalikan ID lokasi
}

int Player::getStatus() {
	return Status;			// Mengembalikan ID status
}

int Player::getOD() {
	return OD_Meter;		// Mengembalikan tingkat OD
}

int Player::getSakaw() {
	return Sakaw_Meter;		// Mengembalikan tingkat Sakaw
}

int Player::getMoney() {
	return Money;			// Mengembalikan jumlah uang
}

// Fungsi set
void Player::setName(string newName) {
	Name = newName;				// Mengeset nama karakter
}

void Player::setLocation(int newLocation) {
	Location = newLocation;		// Mengeset ID lokasi
}

void Player::setStatus(int newStatus) {
	Status = newStatus;			// Mengeset ID Status
}

void Player::setOD(int newOD) {
	if (newOD > 100) {newOD = 100;}
	OD_Meter = newOD;			// Mengeset tingkat OD
}

void Player::setSakaw(int newSakaw) {
	if (newSakaw > 100) {newSakaw = 100;}
	Sakaw_Meter = newSakaw;		// Mengeset tingkat Sakaw
}

void Player::setMoney(int newMoney) {
	Money = newMoney;			// Mengeset jumlah uang
}

// Fungsi-fungsi terkait uang
int Player::IsBroke() {
	if (getMoney() <= 0) {
		return 1;				// Mengirimkan 1 jika karakter kehabisan uang
	} else {
		return 0;				// Mengirimkan 0 jika karakter masih memiliki uang
	}
}

int Player::addMoney(int M) {
	return (getMoney() + M);	// Menambah jumalh uang
}

int Player::decMoney(int M) {
	return (getMoney() - M);	// Mengurangi jumlah uang
}

// Fungsi-fungsi pergerakan
void Player::MoveUp() {
	Position.incY();			// Karakter bergerak ke atas -> increment nilai ordinat
}

void Player::MoveLeft() {
	Position.decX();			// Karakter bergerak ke kiri -> decrement nilai absis
}

void Player::MoveRight() {
	Position.incX(); 			// Karakter bergerak ke kanan -> increment nilai absis
}

void Player::MoveDown() {
	Position.decY();			// Karakter bergerak ke bawah -> decrement nilai ordinat
}

void Player::Teleport(int newLocation) {			// Method untuk berpindah lokasi
	if (newLocation == 0) {
		setPosition(2,1);
		setDirection(2);
		setLocation(newLocation);
		cout << "Player tiba di rumah" << endl;
	} else if (newLocation == 1) {
		if (Location==0){
		setPosition(0,7);
		setDirection(3);
		setLocation(newLocation);
		cout << "Player tiba di lahan" << endl;
		}
		else if (Location==2){
		setPosition(5,7);
		setDirection(2);
		setLocation(newLocation);
		cout << "Player tiba di lahan" << endl;
		}
	} else if (newLocation == 2) {
		setPosition(3,6);
		setDirection(3);
		setLocation(newLocation);
		cout << "Player tiba di toko" << endl;
	}
}

// void Player::CurrField() {
	// if (getDirection() == 1) {
		// Position.incY();
	// }
	// else if (getDirection() == 2) {
		// Position.decX();
	// }
	// else if (getDirection() == 3) {
		// Position.incX();
	// }
	// else if (getDirection() == 4) {
		// Position.decY();
	// }
// }

Inventory* Player::getInventory(){
	return Brangkas;		// Mengirimkan isi inventory karakter
}

void Player::Plow(AllMap* am) {
	am->GetLFieldXY(FaceX(),FaceY())->Kerja('c');		// Mencangkul lahan
}
void Player::Put(AllMap* am, int ID) {
	am->GetLFieldXY(FaceX(),FaceY())->Kerja(ID+48);		// Menanam bibit/menjual hasil panen
}
void Player::Harvest(AllMap* am) {
	am->GetLFieldXY(FaceX(),FaceY())->Kerja('h');		// Mengambil hasil panen
}

